package cn.edu.xjtu.work.checkPerfectNumber;

import java.util.ArrayList;
import java.util.List;

/**
 * 507. 完美数
 * 
 * 对于一个 正整数，如果它和除了它自身以外的所有 正因子 之和相等，我们称它为 「完美数」。
 * 
 * 给定一个 整数 n， 如果是完美数，返回 true，否则返回 false
 * 
 * 来源：力扣（LeetCode） 链接：https://leetcode-cn.com/problems/perfect-number
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Solution {
    public static void main(String[] args) {
        Solution solu = new Solution();
        System.out.println(solu.checkPerfectNumber(6));
    }

    public boolean checkPerfectNumber(int num) {
        if (num == 1) {
            return false;
        }
        List<Integer> factor = new ArrayList<>();
        factor.add(1);
        int bound = (int) Math.sqrt(num);
        for (int i = 2; i < bound + 1; i++) {
            if (num % i == 0) {
                factor.add(i);
                factor.add(num / i);
            }
        }

        for (int i = 0; i < factor.size(); i++) {
            num -= factor.get(i);
        }
        return num == 0;
    }
}
